/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package carvajal.dane.web.service;

import carvajal.dane.bl.EncuestaFacade;
import carvajal.dane.entidades.Encuesta;
import carvajal.dane.entidades.EncuestaSyncWrapper;
import carvajal.dane.entidades.Opcionrespuesta;
import carvajal.dane.entidades.Pregunta;
import carvajal.dane.entidades.Tipopregunta;
import com.google.gson.Gson;
import java.net.IDN;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.jws.WebMethod;


/**
 *
 * @author Javier
 */
@WebService(serviceName = "Sync")
public class Sync {
    
    @EJB
    private EncuestaFacade ejbFacade;

    /** This is a sample web service operation */
    @WebMethod(operationName = "Sincronizar")
    public String Sincronizar() {
        String json = "prueba javier";
        List<Encuesta> encuestas = new ArrayList<Encuesta>();
        List<Encuesta> encuestas_temp = new ArrayList<Encuesta>();
        
        try {
            encuestas = this.ejbFacade.findAll();
        } catch (Exception e) {
            json = "Error 1: "+e.getMessage();
        }
        
        for (Encuesta encuesta : encuestas) {
            Encuesta encuenta_temp = new Encuesta();
            encuenta_temp.setIdencuesta(encuesta.getIdencuesta());
            encuenta_temp.setNombreencuesta(encuesta.getNombreencuesta());
            
            List<Pregunta> preguntaList = encuesta.getPreguntaList();
            List<Pregunta> preguntaList_temp = new ArrayList<Pregunta>();
            for (Pregunta pregunta : preguntaList) {
                
                Pregunta pregunta_temp = new Pregunta();
                pregunta_temp.setIdpregunta(pregunta.getIdpregunta());
                pregunta_temp.setTextopregunta(pregunta.getTextopregunta());
                Tipopregunta tipopregunta_temp = new Tipopregunta();
                tipopregunta_temp.setIdtipopregunta(pregunta.getIdtipopregunta().getIdtipopregunta());
                tipopregunta_temp.setDescripcion(pregunta.getIdtipopregunta().getDescripcion());
                System.out.println("Tipo de Pregunta " + tipopregunta_temp.getDescripcion());
                pregunta_temp.setIdtipopregunta(tipopregunta_temp);
                
                List<Opcionrespuesta> opcionrespuestaList = pregunta.getOpcionrespuestaList();
                List<Opcionrespuesta> opcionrespuestaList_temp = new ArrayList<Opcionrespuesta>();
                for (Opcionrespuesta opcionrespuesta : opcionrespuestaList) {
                    Opcionrespuesta opcionrespuesta_temp = new Opcionrespuesta();
                    opcionrespuesta_temp.setIdrespuesta(opcionrespuesta.getIdrespuesta());
                    opcionrespuesta_temp.setTextorespuesta(opcionrespuesta.getTextorespuesta());
                    opcionrespuestaList_temp.add(opcionrespuesta_temp);
                }
                
                pregunta_temp.setOpcionrespuestaList(opcionrespuestaList_temp);
                preguntaList_temp.add(pregunta_temp);
            }
            
            encuenta_temp.setPreguntaList(preguntaList_temp);
            encuestas_temp.add(encuenta_temp);
        }
        
                
/*        Gson gson2 = new GsonBuilder()
        .setExclusionStrategies(new ExclusionStrategy() {

            @Override
            public boolean shouldSkipField(FieldAttributes fa) {
                boolean resp = fa.getAnnotation(OmitirEnGson.class) != null
                        || fa.getName().equals("_persistence_fetchGroup");
                if(resp){
                    System.out.println("Se omite el atributo " + fa.getName() + " de la clase " + fa.getDeclaredClass() );                
                }else{
                    System.out.println(" NO Se omite el atributo " + fa.getName() + " de la clase " + fa.getDeclaredClass() );                
                }                        
                return resp;
            }

            @Override
            public boolean shouldSkipClass(Class<?> type) {
                System.out.println("Clase; " + type);
                return false;
            }
        }).serializeNulls().create();*/
        
        System.out.println("Tamaño;;; "+encuestas_temp.size());
        
        EncuestaSyncWrapper encuestaSyncWrapper = new EncuestaSyncWrapper();
        encuestaSyncWrapper.setEncuestaList(encuestas_temp);
        
       try {
           Gson gson = new Gson();
           json = gson.toJson(encuestaSyncWrapper);
       }
       catch (Exception e) {
           json = "Error 2: "+e.getMessage();
       }
       return IDN.toUnicode(json);
    }
}
